package com.courir.data;

import static com.courir.data.Geschlecht.*;

import java.util.SortedSet;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

import com.google.common.collect.ImmutableSortedSet;
import com.google.common.collect.Iterables;

/**
 * Die Altersgruppen in Straberg.
 */
@RequiredArgsConstructor
public enum Altersgruppe {
	/** Altersgruppe nicht definiert. */
	None(NA, 0),

	// -- MÄNNLICH (Müssen in-order sortiert sein!) --
	/** Männlich */
	M08(M, 8),
	/** Männlich */
	M09(M, 9),
	/** Männlich */
	M10(M, 10),
	/** Männlich */
	M11(M, 11),
	/** Männlich */
	M12(M, 12),
	/** Männlich */
	M13(M, 13),
	/** Männlich */
	M14(M, 14),
	/** Männlich */
	M20(M, 20),
	/** Männlich */
	M25(M, 25),
	/** Männlich */
	M30(M, 30),
	/** Männlich */
	M35(M, 35),
	/** Männlich */
	M40(M, 40),
	/** Männlich */
	M45(M, 45),
	/** Männlich */
	M50(M, 50),
	/** Männlich */
	M55(M, 55),
	/** Männlich */
	M60(M, 60),
	/** Männlich */
	M65(M, 65),

	// -- WEIBLICh (Müssen in-order sortiert sein!) --
	/** Weiblich */
	W08(W, 8),
	/** Weiblich */
	W09(W, 9),
	/** Weiblich */
	W10(W, 10),
	/** Weiblich */
	W11(W, 11),
	/** Weiblich */
	W12(W, 12),
	/** Weiblich */
	W13(W, 13),
	/** Weiblich */
	W14(W, 14),
	/** Weiblich */
	W20(W, 20),
	/** Weiblich */
	W25(W, 25),
	/** Weiblich */
	W30(W, 30),
	/** Weiblich */
	W35(W, 35),
	/** Weiblich */
	W40(W, 40),
	/** Weiblich */
	W45(W, 45),
	/** Weiblich */
	W50(W, 50),
	/** Weiblich */
	W55(W, 55),
	/** Weiblich */
	W60(W, 60),
	/** Weiblich */
	W65(W, 65);

	public static final SortedSet<Altersgruppe> Herren = ImmutableSortedSet.of(
			M20, M25, M30, M35, M40, M45, M50, M55, M60, M65);

	public static final SortedSet<Altersgruppe> Damen = ImmutableSortedSet.of(
			W20, W25, W30, W35, W40, W45, W50, W55, W60, W65);

	public static final SortedSet<Altersgruppe> Erwachsene = ImmutableSortedSet
			.copyOf(Iterables.concat(Herren, Damen));

	@Getter
	private final Geschlecht geschlecht;
	@Getter
	private final int alter;
	private final String name;

	Altersgruppe(Geschlecht geschlecht, int alter) {
		this.geschlecht = geschlecht;
		this.alter = alter;
		this.name = name();
	}

	@Override
	public String toString() {
		return name;
	}
}